package stbz_yc_sdk_golang

import (
	"context"
	"github.com/gogf/gf/os/glog"
	"io/ioutil"
	"net/http"
	"strings"
	"time"
)

type Client struct {
	apiUrl  	string
	serverName 	string
	requestId 	string
	logPath  	string
}

func NewClient(ctx context.Context) (client *Client, err error) {
	client = new(Client)
	return
}

func (a *Client)Post(ctx context.Context, urlMethod string, params string) (str string, err error) {
	defer func() {
		if err != nil {
			glog.Path(a.GetLogPath()).File("error-{Ymd}.log").Printf("请求路径:【%v】 请求方法: 【%v】 请求参数: 【%v】 error: 【%v】 ",
				urlMethod, "POST", params, err)
		}
	}()
	urlMethod = a.GetApiUrl() + urlMethod
	req, err := http.NewRequest("POST", urlMethod, strings.NewReader(params))
	if err != nil {
		return
	}
	req.Header.Set("service_name", a.GetServerName())
	req.Header.Set("request_id", a.GetRequestId())
	resp, err := (&http.Client{
		Timeout: time.Second * 180,//三分钟
	}).Do(req)
	if err != nil {
		return
	}
	body, _ := ioutil.ReadAll(resp.Body)
	err = resp.Body.Close()
	if err != nil {
		return
	}
	str = string(body)
	glog.Path(a.GetLogPath()).File("info-{Ymd}.log").Printf("请求路径:【%v】 请求方法: 【%v】 请求参数: 【%v】 响应参数: 【%v】 ",
		urlMethod, "POST", params, str)
	return
}

func (a *Client)Get(ctx context.Context, urlMethod string, params string) (str string, err error) {
	defer func() {
		if err != nil {
			glog.Path(a.GetLogPath()).File("error-{Ymd}.log").Printf("请求路径:【%v】 请求方法: 【%v】 请求参数: 【%v】 error: 【%v】 ",
				urlMethod, "GET", params, err)
		}
	}()
	urlMethod = a.GetApiUrl() + urlMethod
	req, err := http.NewRequest("GET", urlMethod, strings.NewReader(params))
	if err != nil {
		return
	}
	req.Header.Set("service_name", a.GetServerName())
	req.Header.Set("request_id", a.GetRequestId())
	resp, err := (&http.Client{
		Timeout: time.Second * 180,//三分钟
	}).Do(req)
	if err != nil {
		return
	}
	body, _ := ioutil.ReadAll(resp.Body)
	err = resp.Body.Close()
	if err != nil {
		return
	}
	str = string(body)
	glog.Path(a.GetLogPath()).File("info-{Ymd}.log").Printf("请求路径:【%v】 请求方法: 【%v】 请求参数: 【%v】 响应参数: 【%v】 ",
		urlMethod, "GET", params, str)
	return
}